package data;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import dataTransferObject.Lugar;
import dataTransferObject.Origen;
import dataTransferObject.Parque;
import dataTransferObject.Tienda;
import dataTransferObject.Veterinario;


public class JDBCOrigenDAO implements IOrigenDAO {

	private IUbicacionDAO ubicacionDAO;
	private IMascotaDAO mascotaDAO;
	
	public JDBCOrigenDAO(){
		 ubicacionDAO= new JDBCUbicacionDAO();
		 mascotaDAO= new JDBCMascotaDAO();
	}
	

	public List<Origen> selectOrigen(Connection conn, int idUsuario) {

			List<Origen> lista= new ArrayList<Origen>();
			Origen origen=null;
			PreparedStatement stat=null;
			ResultSet resultSet=null;
			String sql="SELECT * FROM petsociety.origen origen, petsociety.lugar lugar, petsociety.zona zona, petsociety.categoria categoria, petsociety.ubicacion ubicacion,petsociety.usuario usuario, petsociety.mascota mascota WHERE origen.ID_USUARIO=? AND origen.ID_LUGAR=lugar.ID_LUGAR AND zona.ID_ZONA=ubicacion.ID_ZONA AND categoria.ID_CATEGORIA=lugar.ID_CATEGORIA AND ubicacion.ID_UBICACION=lugar.ID_UBICACION AND usuario.ID_USUARIO=origen.ID_USUARIO AND mascota.ID_MASCOTA=origen.ID_MASCOTA";
			try{
			stat = conn.prepareStatement(sql);
			stat.setInt(1, idUsuario);
			resultSet= stat.executeQuery();
			
			while(resultSet.next()){
				 origen=new Origen();

				 Integer anyo=resultSet.getDate("HORA").getYear()+1900;
				 Date hora= new Date(anyo, resultSet.getDate("HORA").getMonth(), resultSet.getDate("HORA").getDate(), resultSet.getTime("HORA").getHours(), resultSet.getTime("HORA").getMinutes());
				 origen.setHora(hora);
				
				 //obtener categoria
				 String categoria=resultSet.getString("categoria.NOMBRE");
				
				 //crear lugar
				 Lugar lugar=new Lugar();
				 
					if(categoria.equals("Parque publico")){
						lugar= new Parque();
					}else if(categoria.equals("Clinica veterinaria")){
						lugar= new Veterinario();
					}else if(categoria.equals("Tienda de mascotas")){
						lugar= new Tienda();
					}
					
				 
				 lugar.setDescripcion(resultSet.getString("DESCRIPCION"));
				 lugar.setHorario(resultSet.getString("HORARIO"));
				 lugar.setIdLugar(resultSet.getInt("ID_LUGAR"));
				 lugar.setNombre(resultSet.getString("lugar.NOMBRE"));
				 
				 //obtener ubicacion
				 lugar.setUbicacion(ubicacionDAO.selectUbicacion(conn,resultSet.getInt("ubicacion.ID_UBICACION")));
				 
				 //obtener mascota
				 origen.setMascota(mascotaDAO.selectMascota(conn,resultSet.getInt("mascota.ID_MASCOTA")));
				 
				 origen.setEstoy(lugar);
				 
				 lista.add(origen);
			}
			
			
			} catch(SQLException e) { 
				System.out.println("selectOrigen Message: " + e.getMessage());
		        System.out.println("selectOrigen SQLState: " + e.getSQLState());
		        System.out.println("selectOrigen ErrorCode: " + e.getErrorCode());
		
				
				}finally {

					try {
			            if (resultSet != null)
			                resultSet.close();
			            if (stat != null)
			                stat.close();
			        } catch (SQLException e) {
			        } 
				}
				
			return lista;	
			
	}
	

	
	
	public boolean insertOrigen(int idUsuario, int idMascota,int idDestino) {
		Connection conn= ConnectionManager.getInstance().CheckOut();
		PreparedStatement stmt=null;

		
		String sql = "INSERT INTO petsociety.origen" +
				" (ID_USUARIO, HORA, ID_LUGAR, ID_MASCOTA)"+
				" VALUES (?, ?, ?, ?)";
		
		try{
			
			stmt = conn.prepareStatement(sql);
						
			
			Calendar cal= Calendar.getInstance();
			Integer anyo=cal.getTime().getYear()+1900;
			String tiempo=anyo + "-"+cal.getTime().getMonth() +"-"+ cal.getTime().getDate() + " " +cal.getTime().getHours() + ":" +cal.getTime().getMinutes() +":" + cal.getTime().getSeconds();
			
			stmt.setInt(1, idUsuario);
			stmt.setString(2, tiempo);
			stmt.setInt(3, idDestino);
			stmt.setInt(4, idMascota);


			stmt.executeUpdate();
			
		} catch (SQLException e) {
            System.out.println("insertOrigen Message: " + e.getMessage());
            System.out.println("insertOrigen SQLState: " + e.getSQLState());
            System.out.println("insertOrigen ErrorCode: " + e.getErrorCode());
        } finally {
        	ConnectionManager.getInstance().CheckIn(conn);
            try {
            	
                if (stmt != null) 
                    stmt.close();
                
            } catch (SQLException e) {
            }
        }		
		
		
		
		return true;
		
		
	}
	
	
}
